package com.bzkj.system.mapper;

import com.bzkj.system.domain.SysBasicDataLog;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 操作日志 数据层
 *
 * @author ruoyi
 */
public interface SysBasicDataLogMapper {

    /**
     * 新增操作日志
     *
     * @param basicDataLog 操作日志对象
     * @return 结果
     */
    public int insertBasicDatalog(SysBasicDataLog basicDataLog);

    /**
     * 查询系统操作日志集合
     *
     * @param operLog 操作日志对象
     * @return 操作日志集合
     */
    public List<SysBasicDataLog> selectOperLogList(SysBasicDataLog operLog);

    /**
     * 批量删除系统操作日志
     *
     * @param operIds 需要删除的操作日志ID
     * @return 结果
     */
    public int deleteOperLogByIds(Long[] operIds);

    /**
     * 查询操作日志详细
     *
     * @param operId 操作ID
     * @return 操作日志对象
     */
    public SysBasicDataLog selectOperLogById(Long operId);

    /**
     * 清空操作日志
     */
    public void cleanOperLog();


    /**
     * 根据表名获取字段翻译
     *
     * @param tableName 表名
     * @return 查询结果
     */
    @Select("SELECT field_name, field_cn_name,is_translated FROM field_translation WHERE table_name = #{tableName} AND is_translated = 1")
    List<Map<String, String>> getFieldTranslations(@Param("tableName") String tableName);

    /**
     * 根据表名获取主表信息
     *
     * @param pkField   主键字段
     * @param tableName 表名
     * @param pkValue   主键值
     * @return 查询结果
     */
    @Select("SELECT  * from ${tableName} WHERE  ${pkField} = #{pkValue}")
    Map<String, Object> selectWarehouseByPk(@Param("pkField") String pkField, @Param("tableName") String tableName, @Param("pkValue") Object pkValue);

    /**
     * 根据表名获取主表数据
     * @param tableName 表名
     * @param pkFields 字段名
     * @param pkValues 入参
     * @return
     */
    @Select("<script>" +
            "SELECT * FROM ${tableName} WHERE " +
            "<foreach collection='pkFields' item='field' index='index' separator=' AND '>" +
            "${field} = #{pkValues[${index}]}" +
            "</foreach>" +
            "</script>")
    Map<String, Object> selectWarehouseByMultiPk(@Param("tableName") String tableName,
                                                 @Param("pkFields") String[] pkFields,
                                                 @Param("pkValues") Object[] pkValues);
    /**
     * 根据表名获取关联表信息
     *
     * @param pkField   关联字段
     * @param tableName 表名
     * @param pkValue   关联字段值
     * @return 查询结果
     */
    @Select("SELECT  * from ${tableName} WHERE  ${pkField} = #{pkValue}")
    List<Map<String, Object>> selectRelatedByPk(@Param("pkField") String pkField, @Param("tableName") String tableName, @Param("pkValue") Object pkValue);

    /**
     * 根据父表ID获取子表信息
     *
     * @param operId 父级ID
     * @return 查询结果
     */
    List<SysBasicDataLog> setDetailDescByParentId(@Param("parentId") Long operId);
}
